package com.example.userlogin.controller;

import com.example.userlogin.entity.User;
import com.example.userlogin.service.UserService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import jakarta.websocket.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;


@Controller
public class UserController {

    @Autowired
    UserService userService;

    @Autowired
    HttpServletRequest request;

    //    处理前端的用户请求，或者给前端传递数据
    @RequestMapping("/")
//    默认进入的首页就是登录页
    public String main() {
        return "login";
    }
//    进入管理体统主窗体
//    静态资源的引入
    @RequestMapping("/main")
    public String index(Model model){
        Object username = request.getSession().getAttribute("username");
        System.out.println(username);
//        首先判断session里面是否有用户，如果有用户的值。证明用户登录了，如果没有用户的值，就说明没有登录，所有后续的访问都不允许
//        要求先去登录
        if (username==null){
            return "login";
        }else {
        model.addAttribute("username",username);
        return "main";
        }
    }

    //    进入用户注册页面
    @RequestMapping("/register")
    public String register() {
        return "register";
    }

    //    处理一下用户的注册
    @RequestMapping("/registerProcess")
    public String register(@RequestParam String username, @RequestParam String userpwd) {
//        接收到前端发送过来的数据
        System.out.println("接收到了数据----" + username);
        if (username.isEmpty()) {
            return "register";
        } else {
//        将数据组装成user实体对象
            User user = new User();
            user.setUsername(username);
            user.setPassword(userpwd);
            user.setRights("0");
            user.setStatus("0");
//        调用service的add方法将对象增加到数据库
            if (userService.add(user) == 1) {
                return "redirect:/login";
            } else {
                return "redirect:/register";
            }
//        如果成功，就进入login登录页面，否则，就提示错误
        }
    }

    //   处理用户的登录请求
    @RequestMapping("/login")
    public String loginProcess(HttpServletRequest request,@RequestParam String username, @RequestParam String userpwd) {
//确认接受到参数
        if (username.isEmpty()) {
            return "error";
        } else {
//            1.组装一下user实体对象
            User user = new User();
            user.setUsername(username);
            user.setPassword(userpwd);
//            2.调用service的findOne方法去查看数据库是否有前端发送的用户名和密码
            User userdb = userService.findOne(user);
//            3.如果有用户名，而且密码也对，就可以进入主页
//              如果有用户名，但密码不对，进入错误页面
//              用户名不存在，直接进入错误页面
            if (userdb.getUsername().isEmpty()) {
                return "redirect:/error";
            } else {
                if (userdb.getPassword().equals(userpwd)) {
//                    使用会话技术存储下来当前登录的用户，session
                    HttpSession session = request.getSession();
                    session.setAttribute("username",username);
                    return "redirect:/main";
                } else {
                    return "redirect:/error";
                }
            }
        }
    }

    //    用户退出
    @RequestMapping("/logout")
    public String logout(){
//        1.直接清除session里的username对应的值
        request.getSession().removeAttribute("username");

//        2.返回到登录页面
        return "redirect:/";
    }

    @RequestMapping("/index")
    public String index(){

//        2.返回到登录页面
        return "index";
    }

}